package bridge;

import bridge.color.impl.BlueColor;
import bridge.color.impl.RedColor;
import bridge.shape.Shape;
import bridge.shape.impl.Circle;
import bridge.shape.impl.Square;

/**
 * 桥接模式的主程序
 * 桥接模式 (Bridge Pattern)将抽象部分与它的实现部分分离，使它们都可以独立地变化
 * 桥接模式的核心思想是：用组合关系代替继承关系，通过引入一个桥梁（Bridge）来连接抽象和实现。
 * 假设您要开发一个图形绘制程序，需要支持多种形状（如圆形、方形）和多种颜色（如红色、蓝色）。
 * 如果不使用桥接模式，可能会创建 RedCircle、BlueCircle、RedSquare、BlueSquare 等类。
 * 如果再增加一个形状（三角形）和一种颜色（绿色），您就需要新增两个类 (GreenTriangle、GreenSquare)，
 * 这样类层次结构将变得非常复杂且难以维护。
 * 桥接模式方案：您可以将形状作为抽象层，将颜色作为实现层。通过一个桥梁连接它们，就可以只创建 $m$ 个形状类和 $n$ 个颜色类，总类数量是 $m+n$。
 * 这个桥接指的就是接口{@link bridge.color.Color}和 抽象类{@link Shape}把Color作为其中的一个属性
 *
 * @author Liu Yicong
 * @date 2025/9/23
 */
public class BridgeClient {
	public static void main(String[] args) {
		// 创建红色圆形
		Shape redCircle = new Circle(new RedColor());
		redCircle.draw();

		// 创建蓝色正方形
		Shape blueSquare = new Square(new BlueColor());
		blueSquare.draw();

		// 轻松扩展：如果新增一个 GreenColor，无需修改 Circle 和 Square
	}
}
